Using what you have learnt by building the blog website using Flask, you're now going to build your own eCommerce website. Your website needs to have a working cart and checkout.

  • It should be able to display items for sale and take real payment from users.

  • It should have login/registration authentication features.

Here is an example website:

https://store.waitbutwhy.com/


You should consider using the Stripe API:

https://stripe.com/docs/payments/checkout

Questions for this assignment

Reflection Time:

This is a place to journal your experience of completing this project. This will help you figure out how to improve as a developer.

Write down how you approached the project. What was hard, what was easy. How might you improve for the next project? What was your biggest learning from today? What would you do differently if you were to tackle this project again?

ABHIJIT RANGARI
Posted 3 months ago

Reflection Time:

This is a place to journal your experience of completing this project. This will help you figure out how to improve as a developer.

Write down how you approached the project. What was hard, what was easy. How might you improve for the next project? What was your biggest learning from today? What would you do differently if you were to tackle this project again?

from django.contrib import admin

from django.urls import path, include

from django.conf.urls.static import static

from . import settings


urlpatterns = [

path('admin/', admin.site.urls),

path('', include('store.urls'))

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

from django.db import models



class Category(models.Model):

name = models.CharField(max_length=50)


@staticmethod

def get_all_categories():

return Category.objects.all()


def __str__(self):

return self.name

from django.db import models



class Customer(models.Model):

first_name = models.CharField(max_length=50)

last_name = models.CharField(max_length=50)

phone = models.CharField(max_length=10)

email = models.EmailField()

password = models.CharField(max_length=100)


# to save the data

def register(self):

self.save()


@staticmethod

def get_customer_by_email(email):

try:

return Customer.objects.get(email=email)

except:

return False


def isExists(self):

if Customer.objects.filter(email=self.email):

return True


return False

from django.db import models

from .category import Category



class Products(models.Model):

name = models.CharField(max_length=60)

price = models.IntegerField(default=0)

category = models.ForeignKey(Category, on_delete=models.CASCADE, default=1)

description = models.CharField(

max_length=250, default='', blank=True, null=True)

image = models.ImageField(upload_to='uploads/products/')


@staticmethod

def get_products_by_id(ids):

return Products.objects.filter(id__in=ids)


@staticmethod

def get_all_products():

return Products.objects.all()


@staticmethod

def get_all_products_by_categoryid(category_id):

if category_id:

return Products.objects.filter(category=category_id)

else:

return Products.get_all_products()

from django.db import models

from .product import Products

from .customer import Customer

import datetime



class Order(models.Model):

product = models.ForeignKey(Products,

on_delete=models.CASCADE)

customer = models.ForeignKey(Customer,

on_delete=models.CASCADE)

quantity = models.IntegerField(default=1)

price = models.IntegerField()

address = models.CharField(max_length=50, default='', blank=True)

phone = models.CharField(max_length=50, default='', blank=True)

date = models.DateField(default=datetime.datetime.today)

status = models.BooleanField(default=False)


def placeOrder(self):

self.save()


@staticmethod

def get_orders_by_customer(customer_id):

return Order.objects.filter(customer=customer_id).order_by('-date')

from django.contrib import admin

from django.urls import path

from .views.home import Index, store

from .views.signup import Signup

from .views.login import Login, logout

from .views.cart import Cart

from .views.checkout import CheckOut

from .views.orders import OrderView

from .middlewares.auth import auth_middleware



urlpatterns = [

path('', Index.as_view(), name='homepage'),

path('store', store, name='store'),


path('signup', Signup.as_view(), name='signup'),

path('login', Login.as_view(), name='login'),

path('logout', logout, name='logout'),

path('cart', auth_middleware(Cart.as_view()), name='cart'),

path('check-out', CheckOut.as_view(), name='checkout'),

path('orders', auth_middleware(OrderView.as_view()), name='orders'),


]

from django.contrib import admin

from django.urls import path

from .views.home import Index, store

from .views.signup import Signup

from .views.login import Login, logout

from .views.cart import Cart

from .views.checkout import CheckOut

from .views.orders import OrderView

from .middlewares.auth import auth_middleware



urlpatterns = [

path('', Index.as_view(), name='homepage'),

path('store', store, name='store'),


path('signup', Signup.as_view(), name='signup'),

path('login', Login.as_view(), name='login'),

path('logout', logout, name='logout'),

path('cart', auth_middleware(Cart.as_view()), name='cart'),

path('check-out', CheckOut.as_view(), name='checkout'),

path('orders', auth_middleware(OrderView.as_view()), name='orders'),


]

from django.shortcuts import render, redirect, HttpResponseRedirect

from store.models.product import Products

from store.models.category import Category

from django.views import View



# Create your views here.

class Index(View):


def post(self, request):

product = request.POST.get('product')

remove = request.POST.get('remove')

cart = request.session.get('cart')

if cart:

quantity = cart.get(product)

if quantity:

if remove:

if quantity <= 1:

cart.pop(product)

else:

cart[product] = quantity-1

else:

cart[product] = quantity+1


else:

cart[product] = 1

else:

cart = {}

cart[product] = 1


request.session['cart'] = cart

print('cart', request.session['cart'])

return redirect('homepage')


def get(self, request):

# print()

return HttpResponseRedirect(f'/store{request.get_full_path()[1:]}')



def store(request):

cart = request.session.get('cart')

if not cart:

request.session['cart'] = {}

products = None

categories = Category.get_all_categories()

categoryID = request.GET.get('category')

if categoryID:

products = Products.get_all_products_by_categoryid(categoryID)

else:

products = Products.get_all_products()


data = {}

data['products'] = products

data['categories'] = categories


print('you are : ', request.session.get('email'))

return render(request, 'index.html', data)

from django.shortcuts import render, redirect, HttpResponseRedirect

from django.contrib.auth.hashers import check_password

from store.models.customer import Customer

from django.views import View



class Login(View):

return_url = None


def get(self, request):

Login.return_url = request.GET.get('return_url')

return render(request, 'login.html')


def post(self, request):

email = request.POST.get('email')

password = request.POST.get('password')

customer = Customer.get_customer_by_email(email)

error_message = None

if customer:

flag = check_password(password, customer.password)

if flag:

request.session['customer'] = customer.id


if Login.return_url:

return HttpResponseRedirect(Login.return_url)

else:

Login.return_url = None

return redirect('homepage')

else:

error_message = 'Invalid !!'

else:

error_message = 'Invalid !!'


print(email, password)

return render(request, 'login.html', {'error': error_message})



def logout(request):

request.session.clear()

return redirect('login')

from django.shortcuts import render, redirect

from django.contrib.auth.hashers import make_password

from store.models.customer import Customer

from django.views import View



class Signup (View):

def get(self, request):

return render(request, 'signup.html')


def post(self, request):

postData = request.POST

first_name = postData.get('firstname')

last_name = postData.get('lastname')

phone = postData.get('phone')

email = postData.get('email')

password = postData.get('password')

# validation

value = {

'first_name': first_name,

'last_name': last_name,

'phone': phone,

'email': email

}

error_message = None


customer = Customer(first_name=first_name,

last_name=last_name,

phone=phone,

email=email,

password=password)

error_message = self.validateCustomer(customer)


if not error_message:

print(first_name, last_name, phone, email, password)

customer.password = make_password(customer.password)

customer.register()

return redirect('homepage')

else:

data = {

'error': error_message,

'values': value

}

return render(request, 'signup.html', data)


def validateCustomer(self, customer):

error_message = None

if (not customer.first_name):

error_message = "Please Enter your First Name !!"

elif len(customer.first_name) < 3:

error_message = 'First Name must be 3 char long or more'

elif not customer.last_name:

error_message = 'Please Enter your Last Name'

elif len(customer.last_name) < 3:

error_message = 'Last Name must be 3 char long or more'

elif not customer.phone:

error_message = 'Enter your Phone Number'

elif len(customer.phone) < 10:

error_message = 'Phone Number must be 10 char Long'

elif len(customer.password) < 5:

error_message = 'Password must be 5 char long'

elif len(customer.email) < 5:

error_message = 'Email must be 5 char long'

elif customer.isExists():

error_message = 'Email Address Already Registered..'

# saving


return error_message

from django.db import models

from .product import Products

from .customer import Customer

import datetime



class Order(models.Model):

product = models.ForeignKey(Products,

on_delete=models.CASCADE)

customer = models.ForeignKey(Customer,

on_delete=models.CASCADE)

quantity = models.IntegerField(default=1)

price = models.IntegerField()

address = models.CharField(max_length=50, default='', blank=True)

phone = models.CharField(max_length=50, default='', blank=True)

date = models.DateField(default=datetime.datetime.today)

status = models.BooleanField(default=False)


def placeOrder(self):

self.save()


@staticmethod

def get_orders_by_customer(customer_id):

return Order.objects.filter(customer=customer_id).order_by('-date')

from django.shortcuts import render, redirect


from django.contrib.auth.hashers import check_password

from store.models.customer import Customer

from django.views import View


from store.models.product import Products

from store.models.orders import Order



class CheckOut(View):

def post(self, request):

address = request.POST.get('address')

phone = request.POST.get('phone')

customer = request.session.get('customer')

cart = request.session.get('cart')

products = Products.get_products_by_id(list(cart.keys()))

print(address, phone, customer, cart, products)


for product in products:

print(cart.get(str(product.id)))

order = Order(customer=Customer(id=customer),

product=product,

price=product.price,

address=address,

phone=phone,

quantity=cart.get(str(product.id)))

order.save()

request.session['cart'] = {}


return redirect('cart')

from django.shortcuts import render, redirect

from django.contrib.auth.hashers import check_password

from store.models.customer import Customer

from django.views import View

from store.models.product import Products

from store.models.orders import Order

from store.middlewares.auth import auth_middleware



class OrderView(View):


def get(self, request):

customer = request.session.get('customer')

orders = Order.get_orders_by_customer(customer)

print(orders)

return render(request, 'orders.html', {'orders': orders})


Give Feedback

What went well? What could be improved?

Sagarika Keshri
Posted 3 months ago

Reflection Time:

This is a place to journal your experience of completing this project. This will help you figure out how to improve as a developer.

Write down how you approached the project. What was hard, what was easy. How might you improve for the next project? What was your biggest learning from today? What would you do differently if you were to tackle this project again?

import googletrans
import speech_recognition
import gtts
import playsound

recognizer=speech_recognition.Recognizer()
with speech_recognition.Microphone() as source:
    print("Speak Now")
    voice=recognizer.listen(source)
    text=recognizer.recognize_google(voice,language="fr")
    print(text)
translator=googletrans.Translator()
translation=translator.translate(text,dest="fr")
print(translation.text)
converted_voice=gtts.gTTS(translation.text,"fr")
converted_voice.save("hello.mp3")
playsound.playsound("hello.mp3")

Give Feedback

What went well? What could be improved?

Mehardeep Singh
Posted 3 months ago

Reflection Time:

This is a place to journal your experience of completing this project. This will help you figure out how to improve as a developer.

Write down how you approached the project. What was hard, what was easy. How might you improve for the next project? What was your biggest learning from today? What would you do differently if you were to tackle this project again?

done

Give Feedback

What went well? What could be improved?